package com.cherry.i18n.util;

import com.cherry.i18n.service.I18nService;
import org.springframework.context.i18n.LocaleContextHolder;

import java.util.Locale;

/**
 * 国际化工具类
 *
 * @author <a href="kafka@88.com">刘伟(Marvin)</a>
 * @since 2022-02-17
 */
public class I18nUtil {

    private static I18nService i18nService;

    public I18nUtil(I18nService i18nService) {
        I18nUtil.i18nService = i18nService;
    }

    public static I18nService getI18nService() {
        if (i18nService == null) {
            throw new IllegalStateException("i18nService not initialized");
        }
        return i18nService;
    }

    /**
     * 获取国际化消息
     *
     * @param messageCode 消息编码
     * @param args        参数
     * @return 国际化消息
     */
    public static String getMessage(String messageCode, Object... args) {
        return I18nUtil.getMessage(messageCode, messageCode, args);
    }

    /**
     * 获取国际化消息
     *
     * @param messageCode    消息编码
     * @param defaultMessage 默认消息
     * @param args           参数
     * @return 国际化消息
     */
    public static String getMessage(String messageCode, String defaultMessage, Object... args) {
        return I18nUtil.getI18nService().getMessage(messageCode, defaultMessage, args);
    }

    /**
     * 获取国际化消息
     *
     * @param messageCode 消息编码
     * @param locale      区域
     * @param args        参数
     * @return 国际化消息
     */
    public static String getMessage(String messageCode, Locale locale, Object... args) {
        return I18nUtil.getI18nService().getMessage(messageCode, locale, messageCode, args);
    }

    /**
     * 获取国际化消息
     *
     * @param messageCode    消息编码
     * @param defaultMessage 默认消息
     * @param locale         区域
     * @param args           参数
     * @return 国际化消息
     */
    public static String getMessage(String messageCode, String defaultMessage, Locale locale, Object... args) {
        return I18nUtil.getI18nService().getMessage(messageCode, locale, defaultMessage, args);
    }

    /**
     * 获取语种编码
     */
    public static String getLanguageCode() {
        return LocaleContextHolder.getLocale().toLanguageTag();
    }

    /**
     * 获取语种编码（转小写）
     */
    public static String getLanguageCodeLowerCase() {
        return I18nUtil.getLanguageCode().toLowerCase();
    }

}